package com.nas.crocus.service.impl;

import java.util.ArrayList;
import java.util.Collection;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.nas.crocus.dao.RegistroAlojamientoDao;
import com.nas.crocus.domain.Alojamiento;
import com.nas.crocus.domain.RegistroAlojamiento;
import com.nas.crocus.service.AlojamientoService;
import com.nas.crocus.service.RegistroAlojamientoService;

@Service
@Transactional
public class RegistroAlojamientoServiceImpl implements RegistroAlojamientoService {

    @Autowired
    private AlojamientoService alojamientoService;
    
    
    @Autowired
    private RegistroAlojamientoDao registroAlojamientoDao;
    
    @Override
    public void crearRegistro(Long alojamientoId) {
        RegistroAlojamiento registroAlojamiento = registroAlojamientoDao.obtenerPorAlojamientoId(alojamientoId);
        if (registroAlojamiento == null) {
            registroAlojamiento = new RegistroAlojamiento();
            registroAlojamiento.setAlojamientoId(alojamientoId);
            registroAlojamientoDao.guardar(registroAlojamiento);
        }
        
    }

    @Override
    public void actualizarOGuardar(RegistroAlojamiento registroAlojamiento) {
       RegistroAlojamiento registroAlojamientoGuardado = null;
       
       registroAlojamientoGuardado = registroAlojamientoDao.obtenerPorAlojamientoId(registroAlojamiento.getAlojamientoId());
       if (registroAlojamientoGuardado == null) {
           registroAlojamientoDao.guardar(registroAlojamiento);
       } else {
           registroAlojamientoGuardado.setCantidadHabitacionDoble(registroAlojamiento.getCantidadHabitacionDoble());
           registroAlojamientoGuardado.setCantidadHabitacionSimple(registroAlojamiento.getCantidadHabitacionSimple());
           registroAlojamientoGuardado.setCantidadHabitacionOtra(registroAlojamiento.getCantidadHabitacionOtra());
           registroAlojamientoDao.actualizar(registroAlojamiento);
       }
        
    }

    @Override
    public void eliminarPorAlojamientoId(Long alojamientoId) {
        RegistroAlojamiento registroAlojamientoGuardado = null;
        registroAlojamientoGuardado = registroAlojamientoDao.obtenerPorAlojamientoId(alojamientoId);
        registroAlojamientoDao.eliminar(registroAlojamientoGuardado);
        
    }

    @Override
    public Collection<RegistroAlojamiento> buscarPorEventoId(Long eventoId) {
        Collection<Alojamiento> alojamientos = alojamientoService.buscarPorEventoId(eventoId);
        ArrayList <RegistroAlojamiento> registrosAlojamientos = new ArrayList<RegistroAlojamiento>();
        
        for (Alojamiento alojamiento : alojamientos) {
            registrosAlojamientos.add(registroAlojamientoDao.obtenerPorAlojamientoId(alojamiento.getId()));
        }
        
        return registrosAlojamientos;
    }

    @Override
    public RegistroAlojamiento obtener(Long registroAlojamientoId) {
       return registroAlojamientoDao.obtener(registroAlojamientoId);
    }

    @Override
    public RegistroAlojamiento obtenerPorAlojamientoId(Long alojamientoId) {
        return registroAlojamientoDao.obtenerPorAlojamientoId(alojamientoId);        
    }
    
    

}
